package aipay.mobile.activity;

import aipay.mobile.SQLite.DatabaseHandler;
import aipay.mobile.model.Acount;
import aipay.mobile.model.DauSo;
import java.text.BreakIterator;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import aipay.mobile.server.ConfigurationWS;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Point;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Register extends Activity {
	
	
	private EditText name,user,pass,repass,passport,ngt;
	private Button register;
	private Context mcontext;
	private int width,height;
	private ArrayList<DauSo> ListDauSo;
	private DatabaseHandler db;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_register);
		Log.e("Log","Tao dòng 51 Register Khong Loiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii");
		Initilization();
		try {
			Intent i  = getIntent();
			Acount  acount = (Acount) i.getSerializableExtra("acount");
			name.setText(acount.getName());
			user.setText(acount.getUser());
			pass.setText(acount.getPass());
			repass.setText(acount.getPass());
			passport.setText(acount.getPassport());
		} catch (Exception e) {
			// TODO: handle exception
		}
		Display display = getWindowManager().getDefaultDisplay();
		Point size = new Point();
		display.getSize(size);
		width = size.x;
		height = size.y;
		new WSGetDauSo().execute();
		register.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if(name.getText().toString().equals("")||user.getText().toString().equals("")||pass
						.getText().toString().equals("")||repass.getText().toString().equals("")){
					Toast.makeText(getApplicationContext(), "Những ô có dấu * là bắt buộc!",Toast.LENGTH_SHORT).show();
				}
				else {
					if(CheckUser(user.getText().toString().trim())){
						if(CheckPassWord(pass.getText().toString())){
							if(pass.getText().toString().equals(repass.getText().toString()))
							{
								JSONObject json =new JSONObject();
								try {
									json.put("Name",name.getText().toString().trim());
									json.put("user",user.getText().toString().trim());
									json.put("pass",pass.getText().toString()); 
									json.put("passport",passport.getText().toString());
									json.put("ngt",ngt.getText().toString());
								} catch (JSONException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
								Acount acount  = new Acount(user.getText().toString().trim(),0,1,name.getText().toString().trim(),
										pass.getText().toString(),passport.getText().toString());
								db.addAcount(acount);
								ArrayList<Acount> lst = new ArrayList<Acount>();
								lst = (ArrayList<Acount>) db.getAllAcount();
								for (int i = 0; i < lst.size(); i++) {
									Log.e(i +"",lst.get(i).getId()+ ", "+ lst.get(i).getName() +",  "+ lst.get(i).getUser()+",  "+ lst.get(i).getPass()+",  "+ lst.get(i).getPassport());
								}
								showComfirmCode(json);
							}
							else {
								Toast.makeText(getApplicationContext(),"Mật khẩu nhập lại không khớp! Mời bạn nhập lại", Toast.LENGTH_SHORT).show();
							}
						}
					}
				}
			}
		});
		
	}

	private void Initilization() {
		// TODO Auto-generated method stub
		name = (EditText) findViewById(R.id.name);
		user = (EditText) findViewById(R.id.user);
		pass = (EditText) findViewById(R.id.pass);
		repass = (EditText) findViewById(R.id.repass);
		passport = (EditText) findViewById(R.id.passport);
		ngt = (EditText) findViewById(R.id.nguoigt);
		register= (Button) findViewById(R.id.register);
		ListDauSo = new ArrayList<DauSo>();
		mcontext= this;
		db = new DatabaseHandler(mcontext);
	}
	EditText codeconfirm;
	CheckBox check;
	private void showComfirmCode(final JSONObject json) {
		final Dialog dialog = new Dialog(this);
		dialog.setCanceledOnTouchOutside(false);
		dialog.setCancelable(false);
		dialog.setContentView(R.layout.notiy_dialog);
		dialog.getWindow().setLayout(width,height/3);
		dialog.setTitle("Xác nhận đăng ký ví điện tử AIPAY");
		TextView tendangnhap = (TextView) dialog.findViewById(R.id.tendangnhap);
		codeconfirm = (EditText) dialog.findViewById(R.id.codeconfirm);
		check = (CheckBox) dialog.findViewById(R.id.check);
		TextView ok = (TextView) dialog.findViewById(R.id.ok);
		TextView sendcodecomfim = (TextView) dialog.findViewById(R.id.sendcodecomfim);
		TextView cancel = (TextView) dialog.findViewById(R.id.cancel);
		try {
			tendangnhap.setText(json.getString("user").toString());
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		ok.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if(codeconfirm.getText().toString().equals("")){
					Toast.makeText(mcontext,"Mã xác nhận sai",Toast.LENGTH_SHORT).show();
				}
				else {
					if(!check.isChecked()){
						Toast.makeText(mcontext, "Để sử dụng dịch vụ của chúng tôi, bạn phải đồng ý với Điều khoản dịch vụ của Aipay", Toast.LENGTH_SHORT).show();
					}
					else {
						new WSUpdateUser(json.toString()).execute();
						Toast.makeText(mcontext,"Đăng ký thành công",Toast.LENGTH_SHORT).show();
					}
				}
			}
		});
		cancel.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				dialog.dismiss();
			}
		});
		dialog.show();
	}
	// Chuyển từng ký tự nhập vào sang dec để kiểm tra xen là ký tự hay số
	private Boolean CheckPassWord(String pass){
		Boolean check= false;
		if(pass.length()<8 && pass.length()>24)
		{
			check=false;
		}
		else {
			for (int i = 0; i <pass.length(); i++) {
				int dec_number = (int) pass.charAt(i);
				if(47<dec_number && dec_number<58){
					for (int i_i = 0; i_i < pass.length(); i_i++) {
						int dec_characters =(int) pass.charAt(i_i);
						if(dec_characters>96&&dec_characters<123)
						{
							check= true;
							break;
						}
					}
					break;
				}
			}
		}
		if (!check) {
			Toast.makeText(this,"Mật khẩu phải có độ dài từ 8 đến 24 ký tự, chứa ít nhất 1 số và 1 ký tự",Toast.LENGTH_SHORT).show();
		}
		return check;
	}
	
	// ----------Kiểm tra format User-------//
	private Boolean CheckUser(String user){
		Boolean check = false;
		Boolean a= false;
		for (int i = 0; i < user.length(); i++) {
			if(user.charAt(i)==64)
			{
				a= true;
				break;
			}
		}
		if(a){
			check = CheckFormatEmail(user);
		}else {
			if (user.length()>11 || user.length()<10) {
				Toast.makeText(mcontext, "Số điện thoại không hợp lệ",Toast.LENGTH_SHORT).show();
			}
			else {
				check=CheckFomatPhoneNumber(user);
			}
		
		}
		return check;
	}
	
	
	//---------Kiểm tra định dạng số điện thoại------///
	private Boolean CheckFomatPhoneNumber(String user){
		Boolean check = false;
		Boolean a =true;
		for (int i = 0; i < user.length(); i++) {
			if(user.charAt(i)>57 ||user.charAt(i)<48){
				{
					a = false;
					break;
				}
			}
		}
		if (!a) {
			Toast.makeText(mcontext, "Số điện thoại không đúng!!!",Toast.LENGTH_SHORT).show();
		}
		else {
			if(user.length()==10){
				for (int i_i = 0; i_i < ListDauSo.size(); i_i++) {
					if(ListDauSo.get(i_i).getName().equals(user.substring(0,3)))
					{
						check= true;
						break;
					}
				}
			}
			else {
				for (int i_i = 0; i_i < ListDauSo.size(); i_i++) {
					if(ListDauSo.get(i_i).getName().equals(user.substring(0,4)))
					{
						check= true;
						break;
					}
				}
			}
		}
		if (!check) {
			Toast.makeText(mcontext,"Số điện thoại không đúng",Toast.LENGTH_SHORT).show();
		}
		return check;
	}
	
	// ----------Kiểm tra định dạng mail-------//
	
	private Boolean CheckFormatEmail(String email){
		Boolean check = false;
		Matcher matcher;
		Pattern pattern;
		final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"
	            + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
		
		pattern = Pattern.compile(EMAIL_PATTERN);
		matcher = pattern.matcher(email);
		check = matcher.matches();
		if(!check){
			Toast.makeText(this,"email không hợp lệ",Toast.LENGTH_SHORT).show();
		}
		return check;
	}
	
	
	// ----------Get Đầu số của các nhà mạng-------//
		private class WSGetDauSo extends AsyncTask<Void, Void, Void> {

			private ProgressDialog progressDialog;
			private ConfigurationWS mWS;

			public WSGetDauSo() {
				mWS = new ConfigurationWS();
				progressDialog = new ProgressDialog(mcontext);
			}
			@Override
			protected void onPreExecute() {
				super.onPreExecute();
				progressDialog.setMessage( getResources().getString(R.string.Loading) );
				progressDialog.setCancelable(false);
				progressDialog.show();
			}

			@Override
			protected Void doInBackground(Void... params) {
				try {
					ListDauSo.clear();
					JSONArray arrItem =new JSONArray(mWS.GetData("GetDauSo"));
					for (int i = 0; i < arrItem.length(); i++) {
						JSONObject results = arrItem.getJSONObject(i);
						Log.i("Log : ", "Results : " + results);
						DauSo dso = new DauSo();
						dso.setName(results.getString("Name"));
						dso.setDescription(results.getString("Des"));
						ListDauSo.add(dso);
					}
				} catch (Exception e) {
				}
				return null;
			}

			@Override
			protected void onPostExecute(Void result) {
				super.onPostExecute(result);
				if (progressDialog != null)
					progressDialog.dismiss();

			}

		}
		
		// ----------Update user-------//
				private class WSUpdateUser extends AsyncTask<Void, Void, Void> {

					private ProgressDialog progressDialog;
					private ConfigurationWS mWS;
					private String json;

					public WSUpdateUser(String json) {
						mWS = new ConfigurationWS();
						progressDialog = new ProgressDialog(mcontext);
						this.json=json;
					}
					@Override
					protected void onPreExecute() {
						super.onPreExecute();
						progressDialog.setMessage( getResources().getString(R.string.Loading) );
						progressDialog.setCancelable(false);
						progressDialog.show();
					}

					@Override
					protected Void doInBackground(Void... params) {
						try {
							String str =mWS.UpGetData("Register", json);
							Log.i("Log : ", "Results : " + str);
						} catch (Exception e) {
						}
						return null;
					}

					@Override
					protected void onPostExecute(Void result) {
						super.onPostExecute(result);
						if (progressDialog != null)
							progressDialog.dismiss();

					}

				}
				@Override
				public boolean onKeyDown(int keyCode, KeyEvent event)  {
				    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
				        // do something on back.
				        Intent i = new Intent(this,Login.class);
				        startActivity(i);
				    }

				    return super.onKeyDown(keyCode, event);
				}

}
